<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数：根据对象的属性，创建对象，动态给对象添加属性，并返回这个对象
        function Hero (name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this .level = level;



            //console.log(123);

            this.sing = function (address){
                console.log("来" + address + "拍电影" );
            }


            //console.log(this);

        }



        //通过构建函数，创建一个对象

        let lvbu = new Hero("吕布", 22, true, 18) ;
        let zf = new Hero("张飞",18,true,22);
        console.log(typeof lvbu);
        console.log(lvbu.name);
        lvbu.sing("郑州");



        /* 
            总结： 
              1.构造函数就是类
              2.通过类这个函数可以创建对象
              3.类是对象公共属性和方法的抽取
        */


        /* 
             构造函数：
                 1.作用，创建对象
                 2.返回值是一个对象，默认省略
                 3.封装的代码是，给对象多态的添加属性和方法
                 4.this 是当前对象
                 5.函数名用大驼峰
                 6.配合关键字 new 使用
                 7.构造函数和类是一码事
                 8.就是公共对象属性和方法的抽取。
                 9.属性名和形参尽量保持一致，可读性强。  


                 约定大于规范，规范大于编码
        */
    </script>
</body>
</html>